package com.qiyang.lambda;

/**
 * Created on 2018/8/4.
 *
 * @author sehuaqi.
 * 描述：
 */
public class LambdaDemo2 {


    public static void main(String args[]) {
        //执行函数
        Interface1 interface1 = i -> i * 2;

        Interface1 interface2 = (i) -> i * 2;

        Interface1 interface3 = (int i) -> i * 2;

        Interface1 interface4 = (int i) -> {
            System.out.println("多行实现逻辑时");
            return i * 2;
        };

        System.out.println(interface1.doubleNum(2));
        System.out.println(interface2.doubleNum(3));
        System.out.println(interface3.doubleNum(4));
        System.out.println(interface4.doubleNum(5));

        System.out.println(interface1.add(5, 6));
    }

}

/**
 * 尽量都加上这个注解
 * 接口定义尽量拆细，没一个接口只做一件事情（单一职责原则）
 * 接口可以多继承，也同样可以实现复杂情况下一个接口多个功能的需求
 */
@FunctionalInterface
interface Interface1 {
    int doubleNum(int i);

    //int doubleNum2(int i); //加上注解后，会有验证

    //jdk8 接口默认实现方法
    default int add(int x, int y) {
        return x + y;
    }
}

@FunctionalInterface
interface Interface2 {
    int doubleNum(int i);

    //int doubleNum2(int i); //加上注解后，会有验证

    //jdk8 接口默认实现方法
    default int add(int x, int y) {
        return x + y;
    }
}

interface Interface3 extends Interface1, Interface2 {

    @Override
    default int add(int x, int y) {
        return Interface1.super.add(x, y);
    }
}